<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         * result = promise.then() 返回的新promise的结果状态有什么决定？
         *  1. 简单表达：由 then()指定的回调函数执行的结果决定
         *  2. 详细表达：
         *      （1）如果抛出异常，新promise变为rejected，reason为抛出的异常
         *      （2）如果返回的是非promise的任意值，新promise变为resolved，value为返回值
         *      （3）如果返回的是另一个新promise，此promise的结果，就会成为新promise的结果
         * 
         * 
         */

        let p = new Promise((resolve, reject)=>{
            reject('ok');
        });

        let result = p.then((value)=>{
            console.log('value',value);
            // 1. 返回非promise对象
            // 没有return 默认return undefined
            // return 123;
            // return null;
            // return [];
            // return {};
            // return function(){}
            // then方法的返回值，首先是一个promise对象

            // 2. 失败
            // throw 123;
            // throw 'abc';


            // 3. 返回promise对象
            // return new Promise((resolve,reject)=>{
            //     resolve('我是成功了');
            // })
            return new Promise((resolve,reject)=>{
                reject('我是失败了');
            })
            // 1. 结论1：
                // 如果返回一个非promise对象的值：那么result就是一个成功的promise【fulfilled】
                // 你成功的结果值就是 return 的值

            // 2. 结论2：
                // 如果 throw 抛出异常，那么 result就是一个 失败的promise 【rejected】
                //  throw后面的值，及时promise失败的结果值
            // 3. 结论3：
                // 如果返回的是promise 对象，那么你成功我成功，你成功的值就是我成功的值
                //                           你失败我也失败，  你失败的值就是我失败的值
        },reason=>{
            console.log('reason',reason);
            return 123;
        });

        console.log('result',result);
        
    </script>
</body>
</html>